精通Linux系列十一:为什么组长发我的文件我打不开?(文件压缩和打包)
精通Linux系列点击关注公众号,AI&编程干货及时送达
文件压缩和打包
命令 | 含义 |
tar | 将多个文件打包成一个文件。 |
gzip | 用GNU Zip(压缩)文件。 |
gunzip | 解压GNU Zip文件。 |
bzip2 | 以BZip格式压缩文件。 |
bunzip2 | 解压BZip文件。 |
bzcat | 通过标准输入/输出压缩/解压BZip文件。 |
compress | 使用传统的Unix压缩压缩文件。 |
uncompress | 使用传统的Unix压缩解压文件。 |
zcat | 通过标准输入/输出压缩/解压文件(gzip或compress) |
zip | 以Windows Zip格式压缩文件。 |
unzip | 解压Windows Zip文件。 |
munpack | 提取MIME数据至文件。 |
mpack | 将文件转换为MIME格式。 |
Linux可以将文件压缩成各种格式并解压。最流行的格式是GNU Zip(gzip
),其压缩文件以*.gz为扩展名,以及BZip,使用.bz2扩展名。其他常见格式包括来自Windows系统的Zip文件(.zip扩展名),xz文件(.xz和.lzma扩展名),以及偶尔的经典Unix压缩(.Z*扩展名)。
相关技术包括将二进制文件转换为文本格式,以便(例如)在电子邮件消息中传输。现在,这种操作通常通过附件和MIME工具自动完成,但我们将介绍可以从命令行完成此操作的munpack
程序。
tar
stdin stdout - 文件 -- opt --help --version
tar [选项] [文件]
tar
程序将多个文件和目录打包成一个文件以便于传输,可以选择压缩。它最初是用于备份文件到磁带驱动器的;它的名字代表的是“磁带归档”。Tar文件是Linux最常见的文件打包格式。
→ tar -czf myarchive.tar.gz mydir 创建
→ ls -lG myarchive.tar.gz
-rw-r--r-- 1 smith 350 Nov 7 14:09 myarchive.tar.gz
→ tar -tf myarchive.tar.gz 列出内容
mydir/
mydir/dir/
mydir/dir/file10
mydir/file1
mydir/file2
...
→ tar -xf myarchive.tar.gz 解压
如果你在命令行指定了文件,只有那些文件会被处理:
→ tar -xvf myarchive.tar myfile myfile2 myfile3
否则,整个归档文件会被处理。
有用的选项
-c | 创建一个归档文件。你需要在命令行列出输入的文件和目录。 |
-r | 将文件追加到现有的归档文件中。 |
-u | 将新的/改变的文件追加到现有的归档文件中。 |
-A | 将一个归档文件追加到另一个的末尾:例如,tar -A -f first.tar second.tar 将second.tar的内容追加到first.tar。这不适用于压缩的归档文件。 |
-t | 列出(测试)归档文件。 |
-x | 从归档文件中提取文件。 |
-f file | 从给定的文件读取归档文件,或者将归档文件写入给定的文件。这通常是硬盘上的tar文件(比如myarchive.tar),也可以是磁带驱动器(比如*/dev/tape*)。 |
-d | 对比(比较)归档文件和文件系统。 |
-z | 使用gzip 压缩。 |
-j | 使用 bzip2 (布劳斯-惠勒)压缩. |
-Z | 使用 Unix压缩. |
-v | 详细模式:打印额外信息. |
-h | 跟随符号链接,而不仅仅是复制它们. |
-p | 当提取文件时,恢复它们的原始权限和所有权. |
gzip
stdin stdout - 文件 -- 选项 --帮助 --版本
gzip [选项] [文件]
gunzip [选项] [文件]
zcat [选项] [文件]
gzip
和 gunzip
可以压缩和解压缩GNU Zip格式的文件。在某些情况下,原始文件可能会被删除。压缩文件的扩展名为*.gz*。
样本命令
gzip 文件 | 压缩 文件 生成 *文件.gz *。原始的 文件 将被删除. |
gzip -c 文件 | 在标准输出上生成压缩数据. |
cat * 文件`* | gzip` |
gunzip 文件 .gz | 解压缩 文件.gz 生成 *文件 *。原始的 文件.gz 将被删除. |
gunzip -c 文件 .gz | 在标准输出上解压数据. |
cat * 文件`*.gz | gunzip` |
zcat 文件 .gz | 在标准输出上解压数据. |
tar -czf tar文件 目录 | 将目录 目录 打包成一个gzip压缩的tar文件.使用 -cvzf 来在处理时打印文件名. |
bzip2
stdin stdout - 文件 -- 选项 --帮助 --版本
bzip2 [选项] [文件]
bunzip2 [选项] [文件]
bzcat [选项] [文件]
bzip2
和 bunzip2
可以压缩和解压缩Burrows–Wheeler格式的文件。在某些情况下,原始文件可能会被删除。压缩文件的扩展名为 .bz2。
样本命令
bzip2 文件 | 压缩 文件 生成 *文件.bz2 *。原始的 文件 将被删除. |
bzip2 -c 文件 | 在标准输出上生成压缩数据. |
cat 文件 ` | bzip2` |
bunzip2 文件 .bz2 | 解压缩 文件.bz2 生成 *文件 *。原始的 文件.bz2 将被删除. |
bunzip2 -c 文件 .bz2 | 在标准输出上解压数据. |
cat 文件 `.bz2 | bunzip2` |
bzcat 文件 .bz2 | 在标准输出上解压数据. |
tar -cjf tar文件 目录 | 将目录 目录 打包成一个bzipped的tar文件.使用 -cvjf 来在处理时打印文件名. |
compress
stdin stdout - 文件 -- 选项 --帮助 --版本
compress [选项] [文件]
uncompress [选项] [文件]
zcat [选项] [文件]
compress
和 uncompress
可以压缩和解压缩标准Unix压缩格式 (Lempel Ziv)的文件。在某些情况下,原始文件可能会被删除。压缩文件的扩展名为 .Z。
样本命令
compress 文件 | 压缩 文件 生成 *文件.Z *。原始的 文件 将被删除. |
compress -c 文件 | 在标准输出上生成压缩数据. |
cat * 文件`* | compress` |
uncompress 文件 .Z | 解压缩 文件.Z 生成 *文件 *。原始的 文件.Z 将被删除. |
uncompress -c 文件 .Z | 在标准输出上解压数据. |
cat * file`*.Z | uncompress` |
tar -cZf tarfile dir | 将目录 dir 打包为一个压缩的 tar 文件。使用 -cvZf 在处理过程中打印文件名。 |
zip
stdin stdout - file -- opt --help --version
zip [选项] [文件]
zip
和unzip
(压缩和解压)用于操作 Windows Zip 格式的文件。压缩文件的扩展名为 .zip。不同于大多数其他 Linux 压缩命令,zip
并不会删除原始文件。
zip myfile .zip file1 file2 file3 ... | 打包。 |
zip myfile .zip file1 file2 file3 ... | 打包。 |
zip -r myfile .zip dirname | 递归打包。 |
unzip -l myfile .zip | 列出内容。 |
unzip myfile .zip | 解包。 |
munpack
stdin stdout - file --opt --help --version
munpack [选项] 邮件文件
mpack [选项] 文件
现代电子邮件程序可以轻松地发送和接收附件,我们很少会去考虑它,但情况并非一直如此。像munpack
(解包邮件)这样的程序是为了直接在命令行上处理附件而创建的,它们可以将附件添加到邮件消息中或者从中提取出来。例如,如果你有一个文件 messagefile,其中包含一个 JPEG 图像和一个 PDF 文件作为附件,munpack
可以将这两个附件都提取为文件:
→ munpack messagefile
beautiful.jpg (image/jpeg)
researchpaper.pdf (application/pdf)
它的伙伴程序,mpack
(打包邮件),做的是相反的事情,将一个或多个文件作为附件插入到 MIME 格式的文件中。在这里,我们创建了一个包含 MIME 编码的图像 photo.jpg 的文件 attachment.mime:
→ mpack -o attachment.mime photo.jpg
Subject: My photo
推荐阅读
你好,我是拾叁,7年开发老司机、互联网两年外企5年。怼得过阿三老美,也被PR comments搞崩溃过。这些年我打过工,创过业,接过私活,也混过upwork。赚过钱也亏过钱。一路过来,给我最深的感受就是不管学什么,一定要不断学习。只要你能坚持下来,就很容易实现弯道超车!所以,不要问我现在干什么是否来得及。如果你还没什么方向,可以先关注我,这里会经常分享一些前沿资讯和编程知识,帮你积累弯道超车的资本。